<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Set集合</title>
</head>

<body>
  <script>
    // 声明一个 Set 类似Array数组
    let s = new Set();
    let s2 = new Set(['大事儿', '小事儿', '好事儿', '坏事儿', '小事儿']);

    console.log(s, typeof s);

    console.log(s2);  // 元素直接去重了 4个

    // 元素个数
    console.log(s2.size)

    // 添加新的元素
    s2.add('喜事儿');
    console.log(s2.size)

    // 删除指定元素
    s2.delete('坏事儿');
    console.log(s2.size)

    // 清空 移除所有
    // s2.clear();
    // console.log(s2);

    // 检测
    console.log(s2.has('好事儿'));
    console.log(s2.has('糟心事'));

    /* 
      含有iterator接口 keys()  values()  entries()
      但由于Set没有键，只有值，因此keys()和values()返回的结果是相同的
    */

    var dights = new Set()
    dights.add(3).add(2).add(1)
    console.log([...dights.keys()])
    console.log([...dights.values()])
    console.log([...dights.entries()])

    // dights.forEach(function(value1, value2, 原始数组) {}
    dights.forEach(function(value1, value2, set) {
      console.log(value1, value2, set)
    })

    // Set转换为数组  Array.from()或者扩展运算符实现
    var duplicate = new Set([1, 1, {}, undefined])
    console.log(Array.from(duplicate))
    console.log([...duplicate])



  </script>
</body>

</html>